// 10090. 布局 Layout  差分约束.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>

/*

https://loj.ac/p/10090


FJ 有 N 头奶牛 (2\le N\le 1000)，编号为 1\ldots N。奶牛们将按照编号顺序排成一列队伍（可能有多头奶牛在同一位置上）。
换句话说，假设 i 号奶牛位于 P_{\!\;i}，则 P_{\,1}\le P_{\,2}\le \ldots\le P_{\!\;N}。

有些奶牛是好基友，它们希望彼此之间的距离小于等于某个数。有些奶牛是情敌，它们希望彼此之间的距离大于等于某个数。

给出 M_L 对好基友的编号，以及它们希望彼此之间的距离小于等于多少；又给出 M_D 对情敌的编号，
以及它们希望彼此之间的距离大于等于多少 (1\le M_L, M_D\le 10^4)。

请计算：如果满足上述所有条件，1 号奶牛和 N 号奶牛之间的距离（P_{\!\;N}-P_{\,1}）最大为多少。

输入格式
第一行：三个整数 N, M_L, M_D，用空格分隔。
第 2\dots M_L+1 行：每行三个整数 A, B, D，用空格分隔，表示 P_B-P_A\le D。
第 M_L+2\dots M_L+M_D+1 行：每行三个整数 A, B, D，用空格分隔，表示 P_B-P_A\ge D。
保证 1\le A<B\le N, 1\le D\le 10^6。

输出格式
一行，一个整数。如果没有合法方案，输出 \texttt{-1}. 如果有合法方案，但 1 号奶牛可以与 N 号奶牛相距无穷远，
输出 {-2}. 否则，输出 1 号奶牛与 N 号奶牛间的最大距离。
*/


#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

const int N = 1010, M = 10000 + 10000 + 1000 + 10, INF = 0x3f3f3f3f;

int n, m1, m2;
int h[N], e[M], w[M], ne[M], idx;
int dist[N];
int q[N], cnt[N];
bool st[N];

void add(int a, int b, int c)
{
    e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx++;
}

bool spfa(int size)
{
    int hh = 0, tt = 0;
    memset(dist, 0x3f, sizeof dist);
    memset(st, 0, sizeof st);
    memset(cnt, 0, sizeof cnt);

    for (int i = 1; i <= size; i++)
    {
        q[tt++] = i;
        dist[i] = 0;
        st[i] = true;
    }

    while (hh != tt)
    {
        int t = q[hh++];
        if (hh == N) hh = 0;
        st[t] = false;

        for (int i = h[t]; ~i; i = ne[i])
        {
            int j = e[i];
            if (dist[j] > dist[t] + w[i])
            {
                dist[j] = dist[t] + w[i];
                cnt[j] = cnt[t] + 1;
                if (cnt[j] >= n) return true;
                if (!st[j])
                {
                    q[tt++] = j;
                    if (tt == N) tt = 0;
                    st[j] = true;
                }
            }
        }
    }

    return false;
}

int main()
{
    scanf("%d%d%d", &n, &m1, &m2);
    memset(h, -1, sizeof h);

    for (int i = 1; i < n; i++) add(i + 1, i, 0);
    while (m1--)
    {
        int a, b, c;
        scanf("%d%d%d", &a, &b, &c);
        if (a > b) swap(a, b);
        add(a, b, c);
    }
    while (m2--)
    {
        int a, b, c;
        scanf("%d%d%d", &a, &b, &c);
        if (a > b) swap(a, b);
        add(b, a, -c);
    }

    if (spfa(n)) puts("-1");
    else
    {
        spfa(1);
        if (dist[n] == INF) puts("-2");
        else printf("%d\n", dist[n]);
    }

    return 0;
}

 